/**
 * @Company: 小明
 * @Author: 40313
 * @DATE: 2020/12/19 星期六 上午 10:03
 */
package com.situ.oa.user.service.impl;

import com.situ.oa.user.dao.UserDao;
import com.situ.oa.user.pojo.User;
import com.situ.oa.user.service.UserService;
import com.situ.oa.util.ConfigUtil;
import com.situ.oa.util.MD5Util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.PostConstruct;
import java.io.File;
import java.io.IOException;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * ClassName: UserServiceImpl
 *
 * @Author: 40313
 * @Description:(类描述)
 */
@Service("userService")
public class UserServiceImpl implements UserService {
    @Autowired
    private UserDao userDao;

    /**
     * @Title: initUserData
     * @Description: TOD
     * @Return: 方法随系统的启动而自运行
     */
    @PostConstruct
    @Override
    public void initUserData() {
        List<User> userList = userDao.selectAll();
        if (userList == null || userList.size() == 0) {
            User user = new User();
            user.setUserName("admin");
            user.setLoginAccount("admin");
            user.setLoginPass(MD5Util.encode("admin"));
            user.setLoginCount(0);
            user.setYesnoLock(0);
            user.setActiveFlag(1);
            user.setCreateBy("admin");
            user.setCreateDate(new Date());
            userDao.save(user);
        }
    }


    /**
     * @param partFile
     * @param realPath
     * @return 上传文件的相对路径
     * @Title: doUploadAvatar
     * @Description:(执行用户上传)
     */
    @Override
    public String doUploadAvatar(MultipartFile partFile, String realPath) {
        if (!partFile.isEmpty()) {
            String fileName = partFile.getOriginalFilename();
            //build上传文件的相对路径
            StringBuilder filePath = new StringBuilder(ConfigUtil.PATH_AVATAR);
            filePath.append("/").append(Calendar.getInstance().getTimeInMillis())
                    .append(fileName.substring(fileName.lastIndexOf(".")));

            File toFile = new File(realPath + filePath);
            //尝试生成文件夹
            File parentFile = toFile.getParentFile();
            if (!parentFile.exists()) {
                parentFile.mkdirs();
            }
            try {
                partFile.transferTo(toFile);
            } catch (IllegalStateException | IOException e) {
                e.printStackTrace();
            }
            return filePath.toString();
        }
        return null;
    }

    /**
     * @param user
     * @return
     * @Title: doAddUser
     * @Description:(增添用户)
     */
    @Override
    public int doAddUser(User user, String createBy) {
        //需要对用户密码加密
        user.setLoginPass(MD5Util.encode(user.getLoginPass()));
        user.setLoginCount(0);
        user.setYesnoLock(User.IS_LOCK_NO);
        user.setActiveFlag(1);
        user.setCreateBy(createBy);
        user.setCreateDate(new Date());

        return userDao.save(user);
    }

    /**
     * @return 所有用户的集合
     * @Title: findAllUser
     * @Description:(查询所有用户)
     */
    @Override
    public List<User> findAllUser() {
        return userDao.selectAll();
    }

    /**
     * @param user
     * @return 受影响的行数
     * @Title: updateUser
     * @Description:(执行用户修改)
     */
    @Override
    public int updateUser(User user, String updateBy) {
        //对修改的用户密码进行加密
        user.setLoginPass(MD5Util.encode(user.getLoginPass()));
        user.setUpdateBy(updateBy);
        user.setUpdateDate(new Date());
        return userDao.update(user);
    }

    /**
     * @param rowId
     * @return
     * @Title: findOneUser
     * @Description:(这里用一句话描述这个方法的作用)
     */
    @Override
    public User findOneUser(Long rowId) {
        return userDao.selectOne(rowId);
    }

    /**
     * @param rowId
     * @return
     * @Title: deleteUser
     * @Description:(这里用一句话描述这个方法的作用)
     */
    @Override
    public int deleteUser(Long rowId) {
        return userDao.delete(rowId);
    }

    /**
     * @param user
     * @return
     * @Title: findSearchUser
     * @Description:(这里用一句话描述这个方法的作用)
     */
    @Override
    public List<User> findSearchUser(User user) {
        return userDao.findSearch(user);
    }
}
